Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 注释：移除自定义导航栏相关数据
    // statusBarHeight: 0,  // 状态栏高度
    // navHeight: 0,        // 导航栏总高度
    listData: [],        // 粉丝列表数据（从接口获取）
    isLoading: true,     // 加载状态标识
    operatingIndex: -1,  // 正在操作的索引，防止重复点击
    targetUserId: null   // 新增：跳转传入的目标用户ID（需加载其粉丝列表）
  },

  /**
   * 关注/取消关注事件处理（双向功能）
   */
  handleFollow(e) {
    const index = e.currentTarget.dataset.index;
    const listData = [...this.data.listData];
    
    // 防止重复点击同一按钮
    if (this.data.operatingIndex === index) {
      return;
    }

    // 检查数据有效性
    if (!listData || index < 0 || index >= listData.length) {
      console.error("数据异常：", listData, index);
      wx.showToast({ title: '操作失败', icon: 'none' });
      return;
    }

    const currentItem = listData[index];
    const token = wx.getStorageSync('token');
    const userInfo = wx.getStorageSync('userInfo');
    const currentUserId = userInfo?.id;

    // 校验登录状态
    if (!token || !currentUserId) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      setTimeout(() => {
        wx.navigateTo({ url: '/pages/login/login' });
      }, 1500);
      return;
    }

    // 防止用户关注自己
    if (currentUserId === currentItem.followerId) {
      wx.showToast({ title: '不能关注自己', icon: 'none' });
      return;
    }

    // 设置操作中状态（禁用按钮）
    this.setData({ operatingIndex: index });

    // 确定接口地址、请求方法及参数（带双通道与回退）
    const isFollowed = currentItem.isFollowed === 1; // 1=已关注，0=未关注
    const basePayload = {
      followerId: parseInt(currentUserId),         // 当前用户ID（关注者）
      followedId: parseInt(currentItem.followerId) // 目标用户ID（被关注者）
    };

    // 根据是否已关注，准备主/备两个请求方案
    let primaryReq = null;
    let fallbackReq = null;

    if (isFollowed) {
      // 取消关注：优先使用旧接口 DELETE /follow/{id}（若记录ID存在），
      // 否则/或失败时回退到新接口 POST /follow/cancel
      if (currentItem.followRecordId) {
        primaryReq = {
          url: `http://localhost:8080/userr/follow/${currentItem.followRecordId}`,
          method: 'DELETE',
          data: { ...basePayload, recordId: currentItem.followRecordId }
        };
        fallbackReq = {
          url: `http://localhost:8080/userr/follow/cancel`,
          method: 'POST',
          data: basePayload
        };
      } else {
        // 没有记录ID只能走新接口
        primaryReq = {
          url: `http://localhost:8080/userr/follow/cancel`,
          method: 'POST',
          data: basePayload
        };
      }
    } else {
      // 关注：优先使用新接口 /add，失败时回退到旧接口基础路径
      primaryReq = {
        url: `http://localhost:8080/userr/follow/add`,
        method: 'POST',
        data: basePayload
      };
      fallbackReq = {
        url: `http://localhost:8080/userr/follow`,
        method: 'POST',
        data: basePayload
      };
    }

    const sendRequest = (req, onFallback) => {
      wx.request({
        url: req.url,
        method: req.method,
        header: {
          'Authorization': `Bearer ${token}`,
          'Content-Type': 'application/json'
        },
        data: req.data,
        success: (res) => {
          // 如果后端提示方法不被支持或405，触发回退
          const msg = typeof res.data === 'string' ? res.data : (res.data?.msg || '');
          const methodNotAllowed = res.statusCode === 405 || /not supported/i.test(String(msg));

          if (methodNotAllowed && onFallback) {
            onFallback();
            return;
          }

          // 处理重复关注错误
          if (res.data?.code === 500 && String(res.data?.msg || '').includes('Duplicate entry')) {
            currentItem.isFollowed = 1;
            this.setData({ listData });
            wx.showToast({ title: '已关注该用户', icon: 'none' });
            return;
          }

          if (res.data?.code === 200) {
            currentItem.isFollowed = isFollowed ? 0 : 1;
            // 关注成功时保存记录ID
            if (!isFollowed && res.data?.data?.id) {
              currentItem.followRecordId = res.data.data.id;
            }
            this.setData({ listData });
            wx.showToast({
              title: isFollowed ? '取消关注成功' : '关注成功',
              icon: 'success',
              duration: 1500
            });
          } else {
            wx.showToast({ title: (res.data && (res.data.msg || res.data.message)) || '操作失败', icon: 'none' });
            console.error('接口返回异常：', res.data);
          }
        },
        fail: (err) => {
          // 网络失败时尝试回退
          if (onFallback) {
            onFallback();
            return;
          }
          console.error('关注/取消关注接口请求失败：', err);
          wx.showToast({ title: '网络错误', icon: 'none' });
        },
        complete: () => {
          this.setData({ operatingIndex: -1 });
        }
      });
    };

    // 发送主请求；如需要则在不支持时报备份请求
    if (fallbackReq) {
      sendRequest(primaryReq, () => sendRequest(fallbackReq));
    } else {
      sendRequest(primaryReq);
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 注释：移除自定义导航栏高度计算逻辑
    // // 1. 计算导航栏高度
    // try {
    //   const systemInfo = wx.getSystemInfoSync();
    //   const statusBarHeight = systemInfo.statusBarHeight;
    //   const navHeight = statusBarHeight + 44;
    //   this.setData({ statusBarHeight, navHeight });
    // } catch (e) {
    //   console.error('获取系统信息失败', e);
    //   this.setData({ statusBarHeight: 20, navHeight: 64 });
    // }

    // 2. 从跳转参数中获取目标用户ID（关键修改）
    const { userId } = options;
    if (!userId) {
      wx.showToast({ title: '用户ID无效', icon: 'none' });
      setTimeout(() => {
        wx.navigateBack(); // 无ID时返回上一页
      }, 1500);
      return;
    }
    this.setData({ targetUserId: userId }); // 保存目标用户ID

    // 3. 校验登录态并加载粉丝列表（使用目标用户ID）
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      setTimeout(() => {
        wx.navigateTo({ url: '/pages/login/login' });
      }, 1500);
      return;
    }

    // 4. 加载目标用户的粉丝列表
    this.loadFollowers(userId, true);
  },

  /**
   * 从接口加载粉丝列表数据（使用跳转传入的目标用户ID）
   */
  loadFollowers(targetUserId, forceRefresh = false) {
    if (!targetUserId) return;
    
    this.setData({ isLoading: true });
    const token = wx.getStorageSync('token');

    wx.request({
      url: `http://localhost:8080/userr/follow/followers/${targetUserId}`, // 关键：使用目标用户ID
      method: 'GET',
      header: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      },
      success: (res) => {
        if (res.data.code === 200) {
          let data = res.data.data;
          if (Array.isArray(data)) {
            // 格式化数据
            const formattedList = data.map(item => {
              const followerUser = item.followerUser || {};
              return {
                avatar: followerUser.avatarUrl ? `https://gzq123.oss-cn-beijing.aliyuncs.com/${followerUser.avatarUrl}` : '/images/default-avatar.png',
                nickname: followerUser.nickname || '未知用户',
                time: followerUser.joinTime 
                  ? `${followerUser.joinTime.split('-')[0]}年加入` 
                  : '未知时间',
                gender: followerUser.sex === 1 ? '男' : (followerUser.sex === 0 ? '女' : '未知'),
                isFollowed: item.isFollowed === 1 ? 1 : 0,
                followerId: item.followerId || 0,
                followRecordId: item.id || ''
              };
            });

            this.setData({ listData: formattedList });
            console.log('粉丝列表加载成功（目标用户ID：', targetUserId, '）：', formattedList);
          } else {
            wx.showToast({ title: '粉丝列表数据格式异常', icon: 'none' });
          }
        } else {
          wx.showToast({ title: res.data.msg || '获取粉丝列表失败', icon: 'none' });
          console.error('接口返回异常：', res.data);
        }
      },
      fail: (err) => {
        console.error('加载粉丝列表接口请求失败：', err);
        wx.showToast({ title: '网络错误，无法加载粉丝列表', icon: 'none' });
      },
      complete: () => {
        this.setData({ isLoading: false });
      }
    });
  },

  /**
   * 页面显示时刷新数据（使用目标用户ID）
   */
  onShow() {
    const { targetUserId } = this.data;
    if (targetUserId) {
      this.loadFollowers(targetUserId, true); // 刷新目标用户的粉丝列表
    }
  },

  /**
   * 下拉刷新时刷新数据
   */
  onPullDownRefresh() {
    const { targetUserId } = this.data;
    if (targetUserId) {
      this.loadFollowers(targetUserId, true);
    }
    setTimeout(() => {
      wx.stopPullDownRefresh();
    }, 500);
  },

  /**
   * 跳转用户中心
   */
  gotoUserCenter(e) {
    const userId = e.currentTarget.dataset.userid;
    console.log('要传递的userId：', userId);
    wx.navigateTo({ url: `/my/pages/user-detail/user-detail?userId=${userId}` });
  },

  /**
   * 注释：移除自定义导航栏的返回方法（使用默认导航栏的返回功能）
   *//*
  onBack() {
    wx.navigateBack({ delta: 1 });
  },
  */

  /**
   * 其他生命周期函数
   */
  onReady() {},
  onHide() {},
  onUnload() {},
  onReachBottom() {},
  onShareAppMessage() {}
})